package main

// two-sum:两数之和
// 解法1：暴力法
func twoSum1(nums []int, target int) []int {
	result := make([]int, 2)         // 接收两个值的索引
	for i := 0; i < len(nums); i++ { // i为每个数值元素的原始索引(固定)
		for j := i + 1; j < len(nums); j++ { // j为循环检索后每个元素的索引(一直在变化)
			sum := nums[i] + nums[j]
			if sum == target {
				result[0] = i
				result[1] = j
				return result
			}
		}
	}
	return result
}

// two-sum:两数之和
// 解法1：哈希表法
func twoSum2(nums []int, target int) []int {
	result := make([]int, 2)
	hash := make(map[int]int)
	for i := 0; i < len(nums); i++ {
		hash[nums[i]] = i
	}

	for j := 0; j < len(nums); j++ {
		diff := target - nums[j]
		// if _, ok := map[key]; ok {
		// 	//存在
		// }
		if _, ok := hash[diff]; ok && hash[diff] != j {
			result[0] = j
			result[1] = hash[diff]
			return result
		}
	}
	return result
}

// 参考引用：
// golang map 判断 key 是否存在？_程序员写的技术 FAQ 和杂文-CSDN博客_gomap判断key是否存在 https://blog.csdn.net/wide288/article/details/107053396/
